#ifndef __STAFF_H__
#define __STAFF_H__

#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<arpa/inet.h>
#include<unistd.h>
#include<errno.h>
#include<string.h>
#include<sqlite3.h>
#include<sys/wait.h>
#include<signal.h>
#include<time.h>
#include<pthread.h>
#include<sys/stat.h>
#include<sqlite3.h>
#include <sys/epoll.h>

#define DATALEN 1024
#define STAFF_SQL "staff_system.db"


#define ADMIN 1
#define USER 2
#define EXIT 3

#define SUCCESS 0
#define FAIL -1

#define ADMIN_LOGIN 0x10000000     //登录 
#define USER_LOGIN  0x11000000
#define EXIT_LOGIN  0x11100000
#define USER_MODIFY 		0x00002001  
#define USER_QUERY 			0x00003002  
#define ADMIN_MODIFY     	0x10010001  
#define ADMIN_ADDUSER   	0x10030002  
#define ADMIN_DELUSER   	0x10040004
#define ADMIN_QUERY     	0x10050008 
#define ADMIN_HISTORY   	0x10060010  
#define ADMIN_DELHISTORY    0x10070012  
#define QUIT				0x11111111

#define FINSH        'a'
#define ADDR 		 'b'
#define PHONE		 'c'
#define PASSWORD	 'd'
#define NAME         'e'
#define AGE 		 'f'
#define WORK 		 'g'
#define SALARY		 'h'
#define DATE		 'i'
#define LEVEL        'j'
#define FINDBYNAME   'k'
#define FINDALL		 'l'

//定义一个员工结构体的信息
typedef struct {
	int  id;					//员工编号
	int  usertype;				//登录方式 ADMIN 1 USER 2
	char name[10];				//姓名
	int  age;					//年龄
	char telphone[DATALEN];		//电话
	char address[DATALEN];		//地址
	char position[DATALEN];		//职位
	char data_entry[DATALEN];	//入职日期
	double salary;				//薪资
	int rate; 					//评级
	char passwd[6];             //密码
}staffs_info;

//定义一个用于双方通信的结构体
typedef struct {
	int  msgtype;    	 		//请求的消息类型  服务端进行哪个函数
	int  usertype;    			//ADMIN 1	USER 2	   
	char username[DATALEN]; 	//姓名
	char passwd[6];				//登陆密码
	char recvmsg[4096];   	   	//通信的消息
	int  flags;     			//标志位   个人信息
	staffs_info info;     		//员工信息
}Msg;

sqlite3 *db;
void info_print(void); 		//打印显示信息
int log_in(int fd);			//登录
int admin_or_user_login(int fd,Msg *msg);
int process_client_request(int newfd,Msg *msg);//处理客户端请求链接的
int process_user_or_admin_login_request(int newfd,Msg *msg);// 判断数据库是否有此账户
void admin_menu(int fd,Msg *msg);// 管理员的菜单
void do_admin_query(int fd,Msg *msg);//管理元查询
void do_admin_modification(int fd,Msg *msg);//管理员修改
void do_admin_adduser(int fd,Msg *msg);//管理员添加用户
void do_admin_deluser(int fd,Msg *msg);// 管理元删除用户
void do_admin_history (int fd,Msg *msg);//历史记录查询
void do_admin_delhistory(int fd,Msg *msg);//删除历史记录

void user_menu(int fd,Msg *msg); // 用户菜单
void do_user_query(int fd,Msg *msg);//用户查询
void do_user_modification(int fd,Msg *msg);//用户修改

//服务器
int process_admin_query_request(int newfd,Msg *msg);//管理员查询
int process_client_quit_request(int newfd,Msg *msg);//退出
int process_admin_adduser_request(int newfd,Msg *msg);//管理员添加员工
int callback(void*pard,int f_num,char** f_valua,char **f_name);//回调函数
int process_client_delhistory_request(int newfd,Msg *msg);//管理员删除历史记录表
int process_admin_history_request(int newfd,Msg *msg);//管理员查询历史记录
int process_admin_modify_request(int newfd,Msg *msg);//管理员修改
int process_user_or_admin_login_request(int newfd,Msg *msg);//是否登录
int process_user_query_request(int newfd,Msg *msg);//用户查询
int process_admin_deluser_request(int newfd,Msg *msg);//管理员删除用户
int process_user_modify_request(int newfd,Msg *msg);//用户修改





#endif
































